WebAssembly์ WASI๊ฐ ๊ธ๋ก๋ฒ ๋ณด์, ๋ธ๋ก์ฒด์ธ, ๊ฐ์ธ์ ๋ณด ๋ณดํธ์ ํ์์ ์ธ ์ํธํ์ ์ผ๋ก ์์ ํ ๋์๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด์ธ์.
๋ณด์ ๋ฏธ๋์ ์ ๊ธ ํด์ : WebAssembly WASI์ ์ํธํ์ ๋์์ฑ์ ํ
์ ์ ๋ ์ํธ ์ฐ๊ฒฐ๋๋ ๋์งํธ ์ธ์์์ ๊ฐ๋ ฅํ ๋ณด์์ ํ์์ฑ์ ๋ฌด์๋ณด๋ค ์ค์ํฉ๋๋ค. ๋๋ฅ์ ๋๋๋๋ ๊ธ์ต ๊ฑฐ๋๋ฅผ ๋ณดํธํ๋ ๊ฒ๋ถํฐ ์จ๋ผ์ธ ๊ฒ์์ ๊ณต์ ์ฑ์ ๋ณด์ฅํ๊ณ ๊ฐ์ธ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๋ ๊ฒ์ ์ด๋ฅด๊ธฐ๊น์ง, ๊ทธ ๊ธฐ๋ฐ์ด ๋๋ ๋ฉ์ปค๋์ฆ์ ํ ์ก์ ๋ฐ ์์ด์ผ ํฉ๋๋ค. ์ข ์ข ๊ฐ๊ณผ๋์ง๋ง ํ๋ ์ฌ์ด๋ฒ ๋ณด์์ ๋งค์ฐ ์ค์ํ ๊ธฐ๋ณธ ๋ฉ์ปค๋์ฆ ์ค ํ๋๋ ์ง์ ํ ๋์๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ณ์ฐ์ ์ธ ๋งฅ๋ฝ์์, ํนํ ๋ณด์์ ๋ฏผ๊ฐํ ์ ํ๋ฆฌ์ผ์ด์ ์์ '๋์์ฑ'์ ์ด์ผ๊ธฐํ ๋, ์ฐ๋ฆฌ๋ ๋จ์ํ ์์ธก ๋ถ๊ฐ๋ฅ์ฑ์ ๋งํ๋ ๊ฒ์ด ์๋๋๋ค. ์ฐ๋ฆฌ๋ ์ํธํ์ ์ผ๋ก ์์ ํ ๋์์ฑ์ ์๋ฏธํฉ๋๋ค.
์ด ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ WebAssembly(Wasm)์ WebAssembly ์์คํ ์ธํฐํ์ด์ค(WASI)๋ผ๋ ํ์ ์ ์ธ ์ํ๊ณ ๋ด์์, ํนํ ์ํธํ์ ๋์ ์์ฑ์ด๋ผ๋ ํฅ๋ฏธ๋กญ๊ณ ์ค์ํ ์์ญ์ ๊น์ด ํ๊ณ ๋ญ๋๋ค. ์ฐ๋ฆฌ๋ ์ ์์ ํ ๋์์ฑ์ด ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ด ํํํ ์ ์๋ ์๊ตฌ ์ฌํญ์ธ์ง, Wasm๊ณผ WASI๊ฐ ์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง, ๊ทธ๋ฆฌ๊ณ ๋ค์ํ ์ฐ์ ๊ณผ ์ง๋ฆฌ์ ๊ฒฝ๊ณ๋ฅผ ๋์ด ๋ ์์ ํ๊ณ ์ ๋ขฐํ ์ ์๋ ๋์งํธ ๋ฏธ๋๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ๋ฏธ์น๋ ์ฌ์คํ ์ํฅ์ ํ๊ตฌํ ๊ฒ์ ๋๋ค.
์ ์ธ๊ณ์ ์ธ ๋์์ฑ์ ํ์์ฑ: ๋จ์ํ ์ฐ์ฐ ๊ทธ ์ด์
๋ชจ๋ ์ํธํ ํค๋ฅผ ์ถ์ธกํ ์ ์๊ณ , ๋ชจ๋ ๋ณต๊ถ ๋ฒํธ๊ฐ ์์ธก ๊ฐ๋ฅํ๋ฉฐ, ๋ชจ๋ ๋ณด์ ์ฐ๊ฒฐ์ด ์์๋ ์ ์๋ ๋์งํธ ์ธ์์ ์์ํด ๋ณด์ญ์์ค. ์ด๊ฒ์ด ๋ฐ๋ก ์ฐ๋ฆฌ์ ๋์ ์์ฑ์ด ์ง์ ์ผ๋ก ์์ ํ์ง ์์ ๋ ์ฐ๋ฆฌ๊ฐ ์ง๋ฉดํ๋ ํ์ค์ ๋๋ค. ๋์์ฑ์ ๋ง์ ์ํธํ์ ํ๋ฆฌ๋ฏธํฐ๋ธ๊ฐ ๊ตฌ์ถ๋๋ ๊ธฐ๋ฐ์ ๋๋ค. ๊ทธ๊ฒ ์์ด๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ์๊ณ ๋ฆฌ์ฆ๋ ๋ฌด์ฉ์ง๋ฌผ์ด ๋ ์ ์์ต๋๋ค.
๋์์ฑ์ด๋ ๋ฌด์์ด๋ฉฐ ์ ๊ทธํ ๋ก ์ค์ํ๊ฐ?
ํต์ฌ์ ์ผ๋ก, ๋์์ฑ์ ํจํด์ด๋ ์์ธก ๊ฐ๋ฅ์ฑ์ด ์์์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ํธํ์ ๋ชฉ์ ์ ์ํด์๋ ์ด ์ ์๊ฐ ํ ๋จ๊ณ ๋ ๋์์ง๋๋ค. ์ํธํ์ ์ผ๋ก ์์ ํ ๋์ ์์ฑ๊ธฐ(CSPRNG)๋ ์ด์ ์ถ๋ ฅ์ ์์ ํ ์๊ณ ์๋ ๊ด์ฐฐ์์๊ฒ๋ ์์ธกํ ์ ์์ ๋ฟ๋ง ์๋๋ผ, ์ซ์๊ฐ ํ์๋ ์ด๊ธฐ '์๋'๋ฅผ ๊ฒฐ์ ํ๋ ค๋ ๋ ธ๋ ฅ์๋ ์ ํญํ ์ ์๋ ์ซ์๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
์ด๊ฒ์ ์ค์์ฑ์ ์๋ฌด๋ฆฌ ๊ฐ์กฐํด๋ ์ง๋์น์ง ์์ต๋๋ค. ๋ค์ ์๋๋ฆฌ์ค๋ฅผ ๊ณ ๋ คํด ๋ณด์ญ์์ค:
- ์ํธํ ํค: ์์ ํ ์ฐ๊ฒฐ(์: ์ํ ์ ๋ฌด๋ ๋ณด์ ๋ฉ์์ง์ ์ํ HTTPS)์ ์ค์ ํ ๋ ๊ณ ์ ํ ์ธ์ ํค๊ฐ ์์ฑ๋ฉ๋๋ค. ์ด ํค๊ฐ ์์ธก ๊ฐ๋ฅํ๋ค๋ฉด ๊ณต๊ฒฉ์๋ ๊ฐ์ธ ํต์ ์ ๊ฐ๋ก์ฑ๊ณ ํด๋ ํ ์ ์์ต๋๋ค.
- ๋์งํธ ์๋ช : ์ํธํ ์๋ช ์ ์ ์์ ์ธ์ฆํ๊ณ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๊ฒ์ฆํฉ๋๋ค. ๊ทธ ๋ณด์์ ์์กฐ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์์์ ๋งค๊ฐ๋ณ์์ ์์กดํฉ๋๋ค.
- ๋ธ๋ก์ฒด์ธ ๊ธฐ์ : ์ง๊ฐ ์ฃผ์ ์์ฑ๋ถํฐ ํน์ ํฉ์ ๋ฉ์ปค๋์ฆ์์ ๋ธ๋ก ์ ์์ ์ ํ์ ์ด๋ฅด๊ธฐ๊น์ง, ๋ธ๋ก์ฒด์ธ์ ๋ถ์ฐ๋ ๊ธ๋ก๋ฒ ๋คํธ์ํฌ ์ ๋ฐ์ ๊ฑธ์ณ ๊ณต์ ์ฑ๊ณผ ๋ณด์์ ๋ณด์ฅํ๊ธฐ ์ํด ์์ธก ๋ถ๊ฐ๋ฅํ ๋์์ ํฌ๊ฒ ์์กดํฉ๋๋ค.
- ํ ํฐ ์์ฑ: ์ผํ์ฉ ๋น๋ฐ๋ฒํธ(OTP), ์ธ์ฆ ํ ํฐ, ๊ณ ์ ์๋ณ์(UUID)๋ ์ข ์ข ๋ฌด์ฐจ๋ณ ๋์ ๊ณต๊ฒฉ์ด๋ ์ถฉ๋์ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ฐ๋ ฅํ ๋์์ฑ์ ์๊ตฌํฉ๋๋ค.
- ํต๊ณ์ ์ํ๋ง ๋ฐ ์๋ฎฌ๋ ์ด์ : ํญ์ ๋ณด์์ ์ค์ํ ๊ฒ์ ์๋์ง๋ง, ๊ธ๋ก๋ฒ ์ฐ๊ตฌ ํ๋ก์ ํธ๋ฅผ ์ํ ์ ํํ ๊ณผํ์ ์๋ฎฌ๋ ์ด์ ๊ณผ ๊ณต์ ํ ํต๊ณ์ ์ํ๋ง ์ญ์ ๊ณ ํ์ง์ ๋์์ฑ์ผ๋ก๋ถํฐ ์์ฒญ๋ ์ด์ ์ ์ป์ต๋๋ค.
์ด๋ฌํ ๊ฐ๊ฐ์ ๊ฒฝ์ฐ์ ์๋ง์ ๋ค๋ฅธ ๊ฒฝ์ฐ์์, ์ฝํ๊ฑฐ๋ ์์๋ ๋์ ์์ฑ๊ธฐ๋ ์ฌ๊ฐํ ์ทจ์ฝ์ ์ด๋ฉฐ, ์ ์ธ๊ณ ์ฌ์ฉ์ ๋ฐ ์์คํ ์ ์๋นํ ์ํ์ ๋ ธ์ถ์ํต๋๋ค.
๋ณดํธ์ ์ธ ๊ณผ์ : ์ง์ ํ ๋์ ์์ฑํ๊ธฐ
์ปดํจํฐ๋ ๊ฒฐ์ ๋ก ์ ์ธ ๊ธฐ๊ณ์ ๋๋ค. ์ง์๋ฅผ ์ ํํ๊ฒ ๋ฐ๋ฆ ๋๋ค. ์ด๋ฌํ ๋ด์ฌ๋ ๊ฒฐ์ ๋ก ์ ์ง์ ํ ๋์๋ฅผ ์์ฑํ๋ ๊ฒ์ ๊ทผ๋ณธ์ ์ธ ๊ณผ์ ๋ก ๋ง๋ญ๋๋ค. ์ ํต์ ์ธ ์์ฌ ๋์ ์์ฑ๊ธฐ(PRNG)๋ ๊ฒ๋ณด๊ธฐ์๋ ๋ฌด์์์ฒ๋ผ ๋ณด์ด์ง๋ง ์ด๊ธฐ ์๋์ ์๊ณ ๋ฆฌ์ฆ์ ์๋ฉด ์์ ํ ์์ธก ๊ฐ๋ฅํ ์ํ์ค๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ ์ฌ์ ๋ชฉ๋ก์ ์๋ ๊ฒ๊ณผ ๊ฐ์ ๋น๋ณด์ ์ค์ ์์ ์๋ ์๋ฒฝํ๊ฒ ์์ฉ ๊ฐ๋ฅํ์ง๋ง, ์ํธํ์๋ ์ฌ์์ ์ ๋๋ค.
์ํธํ์ ๋์์ฑ์ ๋ฌ์ฑํ๊ธฐ ์ํด, ์์คํ ์ ์ผ๋ฐ์ ์ผ๋ก '์ํธ๋กํผ'์ ์ธ๋ถ ์์ค์ ์์กดํฉ๋๋ค. ์ด๋ ์์์ ๋นํธ๋ก ๋ณํ๋ ์ ์๋ ์์ธก ๋ถ๊ฐ๋ฅํ ๋ฌผ๋ฆฌ์ ํ์์ ๋๋ค. ์ด๋ฌํ ์์ค์๋ ํ๊ฒฝ ์์, ์ฌ์ฉ์ ์ ๋ ฅ ํ์ด๋ฐ(๋ง์ฐ์ค ์์ง์, ํค๋ณด๋ ์ ๋ ฅ), ํ๋ ๋๋ผ์ด๋ธ ํ์ ์๊ฐ ๋๋ ์์ ํ์๊น์ง ํฌํจ๋ ์ ์์ต๋๋ค. ๊ณผ์ ๋ ์ด๋ฌํ ์ํธ๋กํผ ์์ค๊ฐ ์ง์ ์ผ๋ก ๋ฌด์์์ธ์ง, ํจ์จ์ ์ผ๋ก ์์ง๋๋์ง, ๊ทธ๋ฆฌ๊ณ ์์ ์๋ฒ ๋๋ ์ฅ์น์์ ๊ฑฐ๋ํ ํด๋ผ์ฐ๋ ์๋ฒ์ ์ด๋ฅด๊ธฐ๊น์ง ๋ค์ํ ์ปดํจํ ํ๊ฒฝ์์ ์ผ๊ด๋๊ฒ ์ ๊ทผ ๊ฐ๋ฅํ์ง๋ฅผ ๋ณด์ฅํ๋ ๊ฒ์ ๋๋ค.
WebAssembly(Wasm)์ WASI ์ฌ์ธต ๋ถ์
WebAssembly๊ฐ ๋์์ฑ ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ๋ค๋ฃจ๋์ง ์ดํด๋ณด๊ธฐ ์ ์, Wasm๊ณผ WASI๊ฐ ๋ฌด์์ด๋ฉฐ ์ ์ ์ธ๊ณ์ ์ผ๋ก ์ํํธ์จ์ด ๊ฐ๋ฐ์ ํ์ ํ๊ณ ์๋์ง ๊ฐ๋ตํ๊ฒ ์์ฝํด ๋ณด๊ฒ ์ต๋๋ค.
WebAssembly: ์น๊ณผ ๊ทธ ์ด์์ ์ํ ๋ฒ์ฉ ๋ฐ์ด๋๋ฆฌ ํ์
์ข ์ข Wasm์ผ๋ก ์ถ์ฝ๋๋ WebAssembly๋ ์คํ ๊ธฐ๋ฐ ๊ฐ์ ๋จธ์ ์ ์ํ ์ ์์ค ๋ฐ์ด๋๋ฆฌ ๋ช ๋ น์ด ํ์์ ๋๋ค. C/C++, Rust, Go ๋ฑ๊ณผ ๊ฐ์ ๊ณ ์์ค ์ธ์ด์ ์ด์ ๊ฐ๋ฅํ ์ปดํ์ผ ๋์์ผ๋ก ์ค๊ณ๋์ด, ํด๋ผ์ด์ธํธ ์ธก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํด ์น์ ๋ฐฐํฌํ๊ฑฐ๋ ์๋ฒ, IoT ์ฅ์น, ์ฌ์ง์ด ๋ธ๋ก์ฒด์ธ ๋ฐํ์์๋ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ์ฃผ์ ํน์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ฑ๋ฅ: ๋ค์ดํฐ๋ธ์ ๊ฐ๊น์ด ์คํ ์๋.
- ์ด์์ฑ: ๋ค์ํ ํ๋์จ์ด์ ์ด์ ์ฒด์ ์์ ์ผ๊ด๋๊ฒ ์คํ๋ฉ๋๋ค.
- ๋ณด์: ์๋๋ฐ์ค ํ๊ฒฝ์์ ์คํ๋์ด ํธ์คํธ ์์คํ ์ ๋ํ ์ง์ ์ ์ธ ์ ๊ทผ์ ๋ฐฉ์งํฉ๋๋ค.
- ์ปดํฉํธํจ: ์์ ๋ฐ์ด๋๋ฆฌ ํฌ๊ธฐ, ๋น ๋ฅธ ๋ก๋ฉ.
Wasm์ ๋จ์ํ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋์ด ์๋ฒ๋ฆฌ์ค ์ปดํจํ , ์ฃ์ง ์ปดํจํ , ๊ทธ๋ฆฌ๊ณ ๋ถ์ฐ ์ ํ๋ฆฌ์ผ์ด์ (Web3)์ ์ํ ๋ฒ์ฉ ๋ฐํ์์ผ๋ก์ ์๋นํ ์ฃผ๋ชฉ์ ๋ฐ๊ณ ์์ต๋๋ค. 'ํ ๋ฒ ์์ฑํ๋ฉด ์ด๋์๋ ์คํ๋๋ค'๋ ๊ณ ์ฑ๋ฅ์ ์ฝ์์ ์ง์ ์ผ๋ก ๊ธ๋ก๋ฒํ ์ ์์ ๋๋ค.
WASI: ์์คํ ๋ฆฌ์์ค์์ ๊ฐ๊ทน ๋ฉ์ฐ๊ธฐ
Wasm์ ๊ฐ๋ ฅํ ์คํ ํ๊ฒฝ์ ์ ๊ณตํ์ง๋ง, ๋ด์ฌ๋ ์๋๋ฐ์ฑ์ ํ์ผ ์ฝ๊ธฐ, ๋คํธ์ํฌ ์์ผ ์ ๊ทผ, ๋๋ ๊ฒฐ์ ์ ์ผ๋ก ๋์ ์์ฒญ๊ณผ ๊ฐ์ ์์ ์ ์ํด ๊ธฐ๋ณธ ์ด์ ์ฒด์ ์ ์ง์ ์ํธ ์์ฉํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ก ์ฌ๊ธฐ์ WebAssembly ์์คํ ์ธํฐํ์ด์ค(WASI)๊ฐ ๋ฑ์ฅํฉ๋๋ค.
WASI๋ WebAssembly๋ฅผ ์ํ ๋ชจ๋์ ์์คํ ์ธํฐํ์ด์ค์ ๋๋ค. ์ด๋ Wasm ๋ชจ๋์ด ํ๋ซํผ ๋ ๋ฆฝ์ ์ธ ๋ฐฉ์์ผ๋ก ํธ์คํธ ์์คํ ๋ฆฌ์์ค์ ์์ ํ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ํ์คํ๋ API ์ธํธ๋ฅผ ์ ์ํฉ๋๋ค. WASI๋ฅผ Wasm์ ์ํ POSIX์ ์ ์ฌํ ์ธํฐํ์ด์ค๋ก ์๊ฐํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด Wasm ํ๋ก๊ทธ๋จ์ ํ ๋ฒ ์ปดํ์ผ๋ ํ WASI ๋ฐํ์์ ์ ๊ณตํ๋ ๋ชจ๋ ์ด์ ์ฒด์ (์: Node.js, Wasmtime, Wasmer)์์ ์คํ๋ ์ ์์ผ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ๋ค์ดํฐ๋ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฝ๋ ๊ธฐ๋ฅ์ ๋ํ ์ ์ด๋ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌ๋ฐ์ต๋๋ค.
WASI์ ์ค๊ณ ์ฒ ํ์ ๋ณด์์ ์ฐ์ ์ํฉ๋๋ค. ํฌ๊ด์ ์ธ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ๋ ๋์ , WASI๋ ์ญ๋ ๊ธฐ๋ฐ ๋ณด์ ๋ชจ๋ธ์ ์ฌ์ฉํฉ๋๋ค. ์ด ๋ชจ๋ธ์์๋ ๋ชจ๋์ด ํน์ ๋ฆฌ์์ค(์: ํน์ ๋๋ ํ ๋ฆฌ์ ๋ํ ํ์ผ ์์คํ ์ ๊ทผ ๋๋ ๋์ ์์ฑ ๋ฅ๋ ฅ)์ ๋ํ ๊ถํ์ ๋ช ์์ ์ผ๋ก ๋ถ์ฌ๋ฐ์์ผ ํฉ๋๋ค. ์ด ์ธ๋ถํ๋ ์ ์ด๋ Wasm ์๋๋ฐ์ค์ ๋ณด์ ๋ณด์ฅ์ ์ ์งํ๋ฉด์ ๊ทธ ์ ์ฉ์ฑ์ ํ์ฅํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
์ค์ํ ๊ต์ฐจ์ : WebAssembly์ WASI์์์ ๋์์ฑ
Wasm์ ์๋๋ฐ์ค ํน์ฑ๊ณผ ์ ์ธ๊ณ์ ์ผ๋ก ๋ณด์์ ๋ฏผ๊ฐํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ทธ ์ญํ ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ, ์ ๋ขฐํ ์ ์๊ณ ์ํธํ์ ์ผ๋ก ์์ ํ ๋์ ์์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ์ ๋์ ์ผ๋ก ํ์์ ์ด ๋ฉ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก WASI๊ฐ ์ค์ถ์ ์ธ ์ญํ ์ ํ๋ ์ง์ ์ ๋๋ค.
๋ฌธ์ : Wasm ํ๊ฒฝ์์์ ๊ฒฐ์ ๋ก ๋ ๋น๊ฒฐ์ ๋ก
์ค๊ณ์ ์์ํ Wasm ๋ชจ๋์ ๊ฒฐ์ ๋ก ์ ์ ๋๋ค. ๋์ผํ ์ ๋ ฅ์ ์ฃผ๋ฉด ํญ์ ๋์ผํ ์ถ๋ ฅ์ ์์ฑํฉ๋๋ค. ์ด ๊ฒฐ์ ๋ก ์ ์ฌํ์ฑ๊ณผ ๊ฒ์ฆ์ ์์ด ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ด๋ฉฐ, ํนํ ๋ชจ๋ ๋ ธ๋๊ฐ ๋์ผํ ์ํ์ ๋๋ฌํด์ผ ํ๋ ๋ธ๋ก์ฒด์ธ์ ์ค๋งํธ ๊ณ์ฝ๊ณผ ๊ฐ์ ์๋๋ฆฌ์ค์์ ๊ทธ๋ ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ํธํ ์์ ์ ๊ทผ๋ณธ์ ์ผ๋ก ๋น๊ฒฐ์ ๋ก , ์ฆ ์์ธกํ ์ ์๋ ์ถ๋ ฅ์ ์์ฑํ๋ ๋ฅ๋ ฅ์ ์์กดํฉ๋๋ค.
๊ณ ๋ฆฝ๋ ํ๊ฒฝ์์ ์คํ๋๋ Wasm ๋ชจ๋์ด ์ธ๋ถ์ ๋์ ์์ด ๋์๋ฅผ ์์ฑํ๋ ค๊ณ ํ๋ฉด, ์์ธก ๊ฐ๋ฅํ ์ํ์ค๋ฅผ ์์ฑํ๊ฑฐ๋(๊ณ ์ ๋ ๊ฐ์ผ๋ก ์๋๋ ๊ฐ๋จํ PRNG๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ) ์์ ๋์๋ฅผ ์์ฑํ ์ ์๊ฒ ๋ฉ๋๋ค. ๋ ์๋๋ฆฌ์ค ๋ชจ๋ ๋ณด์์ ํ์ฉ๋์ง ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ , ํด๋ผ์ฐ๋ ํจ์ ๋๋ ๋ธ๋ก์ฒด์ธ ๊ฒ์ฆ๊ธฐ์์ ์คํ๋๋ Wasm ๋ชจ๋์ ๊ฐ๋ ฅํ๊ณ ์์ธก ๋ถ๊ฐ๋ฅํ ์์์ ๋ฐ์ดํฐ์ ์ ๊ทผํด์ผ ํฉ๋๋ค.
ํด๊ฒฐ์ฑ : ์ํธํ์ ๋์์ฑ ์ ๊ณต์์์ WASI์ ์ญํ
WASI๋ ํธ์คํธ ํ๊ฒฝ์ผ๋ก๋ถํฐ ์ํธํ์ ์ผ๋ก ์์ ํ ๋์์ ์ ๊ทผํ๊ธฐ ์ํ ํ์คํ๋ API๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์ด๋ ๊ฒฐ์ ๋ก ์ ์ธ Wasm ์๋๋ฐ์ค ๋ด์์ ๋์๋ฅผ ์์ฑํ๋ ค๋ ์๋ ๋์ , Wasm ๋ชจ๋์ด ์ด ์ค์ํ ์์ ์ ์ ๋ขฐํ ์ ์๋ ํธ์คํธ์ ์์ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ํธ์คํธ ์ด์ ์ฒด์ (Linux, Windows, macOS ๋ฑ)๋ ๊ณ ํ์ง์ ์ํธ๋กํผ ํ์ ์ ์งํ๊ณ ์์ ํ ์์์ ๋ฐ์ดํธ๋ฅผ ์ ๊ณตํ ์ฑ ์์ด ์์ต๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์๋ ๋ช ๊ฐ์ง ์ค์ํ ์ด์ ์ด ์์ต๋๋ค:
- ํธ์คํธ ๋ณด์ ํ์ฉ: ํธ์คํธ OS์ ๊ธฐ์กด์ ์ ๊ฒ์ฆ๋ CSPRNG(์: Linux์
/dev/urandom, Windows์ CryptGenRandom)๋ ์ผ๋ฐ์ ์ผ๋ก ๊ณ ๋๋ก ์ต์ ํ๋๊ณ ๊ฒฌ๊ณ ํ๋ฉฐ, ๋ค์ํ๊ณ ๊ณ ํ์ง์ ์ํธ๋กํผ ์์ค์์ ๊ฐ์ ธ์ต๋๋ค. - ํ์คํ: ๊ฐ๋ฐ์๋ ๊ธฐ๋ณธ ํธ์คํธ์ ๊ด๊ณ์์ด ๋จ์ผํ๊ณ ์ด์ ๊ฐ๋ฅํ WASI API๋ฅผ ์ฌ์ฉํ์ฌ ๋์๋ฅผ ์์ฒญํ๋ Wasm ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ ์ํธ ์ด์ฉ์ฑ์ ์ด์งํ๊ณ ํ๋ซํผ๋ณ ์ฝ๋๋ฅผ ์ค์ ๋๋ค.
- ์๋๋ฐ์ค ๋ฌด๊ฒฐ์ฑ: Wasm ๋ชจ๋์ ์๋๋ฐ์ค ์ํ๋ฅผ ์ ์งํฉ๋๋ค. ์ํธ๋กํผ ์์ง์ ๋ณต์ก์ฑ์ ์ดํดํ ํ์ ์์ด ๋จ์ํ ์์ฒญ์ ํ๋ฉด ํธ์คํธ๊ฐ ์์ ํ๊ฒ ์ด๋ฅผ ์ดํํฉ๋๋ค.
WASI 'random_get'์ ์๋ ๋ฐฉ์: ์์ ํ ์ ๊ทผ๋ฒ
์ํธํ์ ์ผ๋ก ์์ ํ ์์์ ๋ฐ์ดํธ๋ฅผ ์ป๊ธฐ ์ํ ํต์ฌ WASI ํจ์๋ random_get์
๋๋ค. ์ด๊ฒ์ ๋๋ฆฌ ๊ตฌํ๋ wasi_snapshot_preview1 API์ ์ผ๋ถ์
๋๋ค.
random_get์ ์๊ทธ๋์ฒ(๊ฐ๋
์ ์ผ๋ก Wasm ๋ชจ๋์์ ๋ณผ ๋)๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
random_get(buffer_pointer: u32, buffer_len: u32) -> error_code
buffer_pointer: ์์์ ๋ฐ์ดํธ๊ฐ ๊ธฐ๋ก๋์ด์ผ ํ Wasm ๋ชจ๋์ ์ ํ ๋ฉ๋ชจ๋ฆฌ ๋ด ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ ๋๋ค.buffer_len: ์์ฒญ๋ ์์์ ๋ฐ์ดํธ ์์ ๋๋ค.error_code: ์ฑ๊ณต ๋๋ ์คํจ(์: ๊ถํ ๋ถ์กฑ, ํธ์คํธ ์ค๋ฅ)๋ฅผ ๋ํ๋ด๋ ๋ฐํ ๊ฐ์ ๋๋ค.
Wasm ๋ชจ๋์ด random_get์ ํธ์ถํ๋ฉด, (ํธ์คํธ๊ฐ ์ ๊ณตํ๋) WASI ๋ฐํ์์ด ์ด ํธ์ถ์ ๊ฐ๋ก์ฑ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด ์์ฒญ์ ํธ์คํธ์ ๊ธฐ๋ณธ CSPRNG์ ๋ํ ์์คํ
ํธ์ถ๋ก ๋ณํํฉ๋๋ค. ํธ์คํธ OS๋ ์์ฒญ๋ ์์ ์ํธํ์ ์ผ๋ก ์์ ํ ์์์ ๋ฐ์ดํธ๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ Wasm ๋ชจ๋์ ์ง์ ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ค์ ์๋๋ค. ๊ทธ๋ฌ๋ฉด Wasm ๋ชจ๋์ ์ด ๋ฐ์ดํธ๋ฅผ ์ํธํ ์์
์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด ์ถ์ํ๋ ๊ฐ๋ ฅํฉ๋๋ค. Wasm์ผ๋ก ์ปดํ์ผ๋ Rust ํ๋ก๊ทธ๋จ์ rand::thread_rng()๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ด๋ ๋ด๋ถ์ ์ผ๋ก WASI์ฉ์ผ๋ก ์ปดํ์ผ๋ ๋ ๊ฒฐ๊ตญ random_get์ ํธ์ถํ๊ฒ ๋ฉ๋๋ค. ์ ์ฌํ๊ฒ, C/C++ ํ๋ก๊ทธ๋จ์ getrandom() ๋๋ CryptGenRandom()๊ณผ ๊ฐ์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์(๋๋ ๊ทธ ๋ํผ)๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, WASI ๋ฐํ์์ ์ด๋ฅผ ์ ์ ํ๊ฒ ๋งคํํฉ๋๋ค.
์ํธํ์ ์ผ๋ก ์์ ํ ์์ฌ ๋์ ์์ฑ๊ธฐ(CSPRNG) ์ดํดํ๊ธฐ
WASI๋ ํธ์คํธ์ CSPRNG์ ์์กดํ๊ธฐ ๋๋ฌธ์, ๊ฐ๋ฐ์์ ์ํคํ ํธ๊ฐ ์ด๋ฌํ ์์ฑ๊ธฐ๋ฅผ ์์ ํ๊ฒ ๋ง๋๋ ์์์ ๊ทธ๊ฒ๋ค์ด ๋ ๊ฐ๋จํ ๋์๋ฌผ๊ณผ ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๋ฌด์์ด CSPRNG๋ฅผ '์์ ํ๊ฒ' ๋ง๋๋๊ฐ?
CSPRNG๋ ๊ทธ ์ถ๋ ฅ์ด ์ํธํ ์ฌ์ฉ์ ์ ํฉํ๋๋ก ๋ณด์ฅํ๋ ์๊ฒฉํ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์ฃผ์ ์์ฑ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์์ธก ๋ถ๊ฐ๋ฅ์ฑ: ๊ณต๊ฒฉ์๋ ๋ชจ๋ ๊ณผ๊ฑฐ ์ถ๋ ฅ์ ์๊ณ ์๋๋ผ๋ ๋ฏธ๋์ ์ถ๋ ฅ์ ์์ธกํ ์ ์์ต๋๋ค.
- ๋น์ฌ๊ตฌ์ฑ์ฑ: ๊ณต๊ฒฉ์๋ ๋ชจ๋ ๊ณผ๊ฑฐ ๋ฐ ๋ฏธ๋์ ์ถ๋ ฅ์ ์๊ณ ์๋๋ผ๋ ์์ฑ๊ธฐ์ ๋ด๋ถ ์ํ๋ ์๋๋ฅผ ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
- ์๋ ์์์ ๋ํ ์ ํญ์ฑ: ์์ฑ๊ธฐ์ ๋ด๋ถ ์ํ(์๋)๊ฐ ์ด๋ ์์ ์์ ์์๋๋๋ผ๋, ํ์ ์ถ๋ ฅ์ ์ด์ ์ถ๋ ฅ์ผ๋ก๋ถํฐ ์์ธก ๋ถ๊ฐ๋ฅํด์ผ ํฉ๋๋ค. ์ด๋ ์ข ์ข ์ฌ์๋ฉ(re-seeding) ๋๋ ์ ๋ฐฉํฅ ๋น๋ฐ์ฑ(forward secrecy)์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ํ๋ก์ธ์ค๋ฅผ ํตํด ๋ฌ์ฑ๋๋ฉฐ, ๋ด๋ถ ์ํ๋ ์๋ก์ด ์ํธ๋กํผ๋ก ์ ๊ธฐ์ ์ผ๋ก ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
- ๋์ ์ํธ๋กํผ ์ถ๋ ฅ: ์ถ๋ ฅ์ ํต๊ณ์ ์ผ๋ก ์ง์ ํ ๋์์ ๊ตฌ๋ณํ ์ ์์ด์ผ ํฉ๋๋ค.
์ด๋ฌํ ์์ฑ ๋๋ถ์ CSPRNG๋ ์ฅ๊ธฐ ํค, ์ธ์ ํค, ๋ ผ์ค(ํ ๋ฒ๋ง ์ฌ์ฉ๋๋ ์ซ์), ๋น๋ฐ๋ฒํธ ํด์ฑ์ ์ํ ์ํธ ๋ฐ ๊ธฐํ ์ค์ํ ๋ณด์ ๋งค๊ฐ๋ณ์๋ฅผ ์์ฑํ๋ ๋ฐ ์ ํฉํฉ๋๋ค.
์ํธ๋กํผ ์์ค: ์ํธํ์ ๋์์ฑ์ ์๋ช ์
CSPRNG์ ํ์ง์ ์์งํ ์ ์๋ ์ํธ๋กํผ์ ์ง๊ณผ ์์ ์ง์ ์ ์ผ๋ก ๊ด๋ จ๋ฉ๋๋ค. ์ํธ๋กํผ๋ ๋ณธ์ง์ ์ผ๋ก ๋ฌผ๋ฆฌ์ ํ๋ก์ธ์ค์์ ์ถ์ถ๋ ์ง์ ํ ๋์์ฑ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ์ํธ๋กํผ ์์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ํ๋์จ์ด ๋์ ์์ฑ๊ธฐ(HRNGs): ์ด ์ก์, ๋๊ธฐ ์ก์ ๋๋ ๋ฐ๋์ฒด ์ก์๊ณผ ๊ฐ์ ์์ ํ์์ ์ด์ฉํ๋ ์ ์ฉ ํ๋์จ์ด ๊ตฌ์ฑ ์์(์ข ์ข CPU๋ ํน์ ์นฉ์์ ๋ฐ๊ฒฌ๋จ). ์ด๋ค์ ์ผ๋ฐ์ ์ผ๋ก ์ต๊ณ ํ์ง์ ์์ค๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
- ์์คํ ์ด๋ฒคํธ: ์ธํฐ๋ฝํธ ํ์ด๋ฐ, ํ๋ ๋๋ผ์ด๋ธ ์ง์ฐ ์๊ฐ, ๋คํธ์ํฌ ํจํท ๋์ฐฉ ์๊ฐ, ํ๋ก์ธ์ค ID, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ฐ ๊ธฐํ ์ด์ ์ฒด์ ์์ค์ ์ด๋ฒคํธ๋ ์ํธ๋กํผ ํ์ ๊ธฐ์ฌํ ์ ์์ต๋๋ค.
- ์ฌ์ฉ์ ์ ๋ ฅ: ๋ง์ฐ์ค ์์ง์, ํค๋ณด๋ ํ์ด๋ฐ ๋ฐ ๊ธฐํ ์ฌ์ฉ์ ์ํธ ์์ฉ์ ์ ํ์ ์ด์ง๋ง ๋ฐ์คํฌํฑ ํ๊ฒฝ์์ ์ผ๋ถ ์ํธ๋กํผ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
์ด์ ์ฒด์ ๋ ์ด๋ฌํ ์์ค์์ ์ง์์ ์ผ๋ก ๋นํธ๋ฅผ ์์งํ๋ '์ํธ๋กํผ ํ'์ ์ ์งํฉ๋๋ค. CSPRNG๊ฐ ์๋๋๊ฑฐ๋ ์ฌ์๋๋ ํ์๊ฐ ์์ ๋, ์ด ํ์์ ๊ฐ์ ธ์ต๋๋ค. ํธ์คํธ CSPRNG์ ๊ฒฌ๊ณ ์ฑ์ ๋ค์ํ๊ณ ๊ณ ํ์ง์ ์ํธ๋กํผ๋ฅผ ์์งํ๋ ๋ฅ๋ ฅ์ ํฌ๊ฒ ์์กดํฉ๋๋ค.
CSPRNG์ PRNG ๊ตฌ๋ณํ๊ธฐ
๋จ์ํ ์์ฌ ๋์ ์์ฑ๊ธฐ(PRNG)์ ์ํธํ์ ์ผ๋ก ์์ ํ ์์ฌ ๋์ ์์ฑ๊ธฐ(CSPRNG)์ ์ฐจ์ด์ ์ ์ดํดํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ณด์ ๋ชฉ์ ์ผ๋ก PRNG๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฐ์ฅ ํํ๊ณ ์ํํ ์ํธํ ์ค์ ์ค ํ๋์ ๋๋ค.
- PRNGs (์: C์
rand(),java.util.Random):- ์ฃผ๋ก ๋น๋ณด์ ์์ ์ฉ (์๋ฎฌ๋ ์ด์ , ๊ณต์ ์ฑ์ด ์ค์ํ์ง ์์ ๊ฒ์, ์ ํ๋ง).
- ์์ฑ ์๋๊ฐ ๋น ๋ฆ ๋๋ค.
- ์์ธก ๊ฐ๋ฅ: ์๋๋ฅผ ์๋ฉด ์ ์ฒด ์ํ์ค๋ฅผ ์ฌํํ ์ ์์ต๋๋ค.
- ํต๊ณ์ ์ผ๋ก๋ ์ข์ง๋ง ์ํธํ์ ์ผ๋ก๋ ์ฝํฉ๋๋ค.
- CSPRNGs (์:
/dev/urandom,CryptGenRandom,java.security.SecureRandom):- ๋ชจ๋ ๋ณด์์ ๋ฏผ๊ฐํ ์์ ์ ํ์์ (ํค ์์ฑ, ๋ ผ์ค, ์ํธ).
- ์ํธ๋กํผ ์์ง ๋ฐ ๋ ๋ณต์กํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ธํด PRNG๋ณด๋ค ๋๋ฆฝ๋๋ค.
- ์์ธก ๋ถ๊ฐ๋ฅ: ๊ณผ๊ฑฐ ์ถ๋ ฅ์ ๋ํ ์์ ํ ์ง์์ด ์์ด๋ ๋ฏธ๋ ์ถ๋ ฅ์ ์ถ์ธกํ ์ ์์ต๋๋ค.
- ์๋๋ ๋ด๋ถ ์ํ๋ฅผ ๋ฐ๊ฒฌํ๋ ค๋ ๊ณต๊ฒฉ์ ์ ํญ๋ ฅ์ด ์์ต๋๋ค.
- ํ๊ฒฝ์ผ๋ก๋ถํฐ ๊ณ ํ์ง์ ์ํธ๋กํผ์ ์์กดํฉ๋๋ค.
WASI์ random_get์ ํนํ ํธ์คํธ์ CSPRNG์ ๋ํ ์ ๊ทผ์ ์ ๊ณตํ์ฌ, Wasm ์ ํ๋ฆฌ์ผ์ด์
์ด ์ค์ํ ๋ณด์ ์์
์ ํ์ํ ์์ค์ ๋์์ฑ์ ์ป์ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
์ฐ์ ์ ๋ฐ์ ์ค์ ์ ์ฉ ์ฌ๋ก ๋ฐ ์ฌ์ฉ ์ฌ๋ก
Wasm/WASI ํ๊ฒฝ ๋ด์์ ์์ ํ๊ฒ ๋์๋ฅผ ์์ฑํ๋ ๋ฅ๋ ฅ์ ๋ฐฉ๋ํ ๊ฐ๋ฅ์ฑ์ ์ด์ด์ฃผ๋ฉฐ, ์๋ง์ ๊ธ๋ก๋ฒ ์ฐ์ ์ ๋ฐ์ ๊ฑธ์ณ ๋ณด์๊ณผ ๊ธฐ๋ฅ์ ํฅ์์ํต๋๋ค.
๋ธ๋ก์ฒด์ธ๊ณผ ์ํธํํ: ๊ฑฐ๋ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ
๋ธ๋ก์ฒด์ธ ๊ธฐ์ ์ ๋ถ์ฐ๋ ํน์ฑ์ ๊ฒฌ๊ณ ํ ๋ณด์๊ณผ ๊ณต์ ์ฑ์ ์๊ตฌํฉ๋๋ค. Wasm์ ์ฑ๋ฅ, ์ด์์ฑ ๋ฐ ์๋๋ฐ์ฑ ๋๋ถ์ ์ค๋งํธ ๊ณ์ฝ ๋ฐ ๋ธ๋ก์ฒด์ธ ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ ํธ๋๋ ๋ฐํ์์ด ๋๊ณ ์์ต๋๋ค. ์ํธํ์ ์ผ๋ก ์์ ํ ๋์์ฑ์ ์ฌ๊ธฐ์ ํ์์ ์ ๋๋ค:
- ์ง๊ฐ ์ฃผ์ ์์ฑ: ๊ณต๊ฐ ํค์ ์ง๊ฐ ์ฃผ์๊ฐ ํ์๋๋ ๊ฐ์ธ ํค๋ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ ์๊ธ์ ๊ณ ์ ์ฑ๊ณผ ๋ณด์์ ๋ณด์ฅํ๊ธฐ ์ํด ๊ฐ๋ ฅํ ๋์์ฑ์ผ๋ก ์์ฑ๋์ด์ผ ํฉ๋๋ค.
- ๋ถ์ฐ ์ ํ๋ฆฌ์ผ์ด์ (dApps): ๋ง์ dApp, ํนํ ํ์ค์ํ ๊ธ์ต(DeFi) ๋ฐ ๊ฒ์(GameFi)์์๋ ๊ณต์ ํ ๋ณต๊ถ, ๊ณ ์ ํ NFT ๋ฐํ, ๋๋ ํน์ ์ง๋ถ ์ฆ๋ช (Proof-of-Stake) ํฉ์ ๋ฉ์ปค๋์ฆ์์ ๊ฒ์ฆ์ ์ ํ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ํด ๋์์ฑ์ด ํ์ํฉ๋๋ค.
- ๋์์ฑ ๋น์ฝ: ์ผ๋ถ ๋ธ๋ก์ฒด์ธ ํ๋กํ ์ฝ์ ๋ค์ํ ์์ ์ ์ํด ์ธ๋ถ์ ๊ฒ์ฆ ๊ฐ๋ฅํ ๋์๋ฅผ ์ฐพ์ต๋๋ค. Wasm/WASI๋ ๋ณด์ ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฌํ ๋น์ฝ์ ์๋นํ ์ ์๋๋ก ํ ์ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ์ํฅ์ ์๋นํฉ๋๋ค. ์์ ํ WASI ์ง์ ๋ธ๋ก์ฒด์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํด ๋ ์ ๋ขฐํ ์ ์๋ ๊ธ์ต ์์คํ , ๊ฒ์ฆ ๊ฐ๋ฅํ ๋์งํธ ์์ฐ, ๊ทธ๋ฆฌ๊ณ ๊ณต์ ํ ๋ถ์ฐ ์ํ๊ณ๋ฅผ ์๋ฏธํฉ๋๋ค.
๋ณด์ ํต์ ๋ฐ ์ํธํ: ๊ธ๋ก๋ฒ ๋ฐ์ดํฐ ๋ณดํธ
์ํธํ๋ ์ด๋ฉ์ผ๋ถํฐ ์ธ์คํดํธ ๋ฉ์์ง ๋ฐ VPN์ ์ด๋ฅด๊ธฐ๊น์ง ๋ชจ๋ ๋ณด์ ํต์ ์ฑ๋์ ํค ์์ฑ ๋ฐ ์ธ์ ์ค์ ์ ์ํด ๋์์ ์์กดํฉ๋๋ค. Wasm์ ๋ค์๊ณผ ๊ฐ์ ์ญํ ์ ํ ์ ์์ต๋๋ค:
- ์์ ํ ํด๋ผ์ด์ธํธ ์ธก ์ํธํ: Wasm ๋ชจ๋์ ๋ธ๋ผ์ฐ์ ๋ ์ฃ์ง์์ ์ง์ ์ํธํ ์์ ์ ์ํํ์ฌ, ์ค์ ์ง์ค์ ์๋ฒ์ ์์กดํ์ง ์๊ณ ์ข ๋จ ๊ฐ ์ํธํ ํต์ ์ ์ํ ํค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- IoT ์ฅ์น ๋ณด์: ๋ฆฌ์์ค๊ฐ ์ ํ๋ IoT ์ฅ์น๋ ์ข ์ข ๊ณ ์ ํ ์ฅ์น ID๋ ์ํธํ ํค๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. Wasm/WASI๋ ์ด๋ฌํ ์์ ์ ์ํ ์์ ํ๊ณ ์ด์ ๊ฐ๋ฅํ ๋ฐํ์์ ์ ๊ณตํ์ฌ, ๋ฐฉ๋ํ ๊ธ๋ก๋ฒ ์ผ์ ๋ฐ ์ก์ถ์์ดํฐ ๋คํธ์ํฌ ์ ๋ฐ์ ๊ฑธ์ณ ์ฅ์น ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
- VPN ํด๋ผ์ด์ธํธ ๋ฐ ํ๋ก์: Wasm์ VPN ํด๋ผ์ด์ธํธ ๋ด์์ ๊ณ ์ฑ๋ฅ์ ๋ณด์ ๊ตฌ์ฑ ์์๋ฅผ ๊ตฌ๋ํ์ฌ, ๊ฐ๋ ฅํ ๋์์ฑ์ ๋ฐํ์ผ๋ก ์ํธํ ํธ๋์ ฐ์ดํฌ ๋ฐ ํฐ๋ ์ค์ ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์ด๋ ๊ตญ๊ฒฝ์ ๋์ด ํต์ ํ๋ ๊ฐ์ธ๊ณผ ์กฐ์ง์ ์ํด ๋ ๋์ ์์ค์ ๋ฐ์ดํฐ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ๋ฐ ๋ณด์์ ๊ฐ๋ฅํ๊ฒ ํ์ฌ, ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ๊ฐ๋ก์ฑ๊ธฐ ๋ฐ ๋ณ์กฐ๋ก๋ถํฐ ๋ณดํธ๋๋๋ก ํฉ๋๋ค.
๊ฒ์ด๋ฐ ๋ฐ ์๋ฎฌ๋ ์ด์ : ๊ณต์ ์ฑ๊ณผ ์์ธก ๋ถ๊ฐ๋ฅ์ฑ
ํญ์ '์ํธํ์ '์ผ๋ก ๊ฐ์ฃผ๋์ง๋ ์์ง๋ง, ๊ฒ์์์์ ๊ณต์ ์ฑ๊ณผ ์๋ฎฌ๋ ์ด์ ์์์ ํต๊ณ์ ์ ํ์ฑ์ ๊ณ ํ์ง์ ๋์์ฑ์ ์๊ตฌํฉ๋๋ค. WASI์ CSPRNG ์ ๊ทผ์ ๋ค์์ ๋ณด์ฅํฉ๋๋ค:
- ๊ณต์ ํ ์จ๋ผ์ธ ๊ฒ์: ์ ๋ฆฌํ ์์ ๋๋กญ, ํฌ์ปค์์์ ์นด๋ ์๊ธฐ, ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ, ๋๋ ์จ๋ผ์ธ ๋กคํ๋ ์ ๊ฒ์์์์ ์น๋ช ํ ๊ณ์ฐ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ๋ํด, ์ํธํ์ ์ผ๋ก ์์ ํ ๋์์ฑ์ ๊ฒฐ๊ณผ๊ฐ ์ง์ ์ผ๋ก ์์ธก ๋ถ๊ฐ๋ฅํ๊ณ ํ๋ ์ด์ด๋ ์ด์์์ ์ํด ์กฐ์๋ ์ ์์์ ๋ณด์ฅํ ์ ์์ต๋๋ค. ์ด๋ ๊ธ๋ก๋ฒ ๊ฒ์ ์ปค๋ฎค๋ํฐ์ ์ ๋ขฐ๋ฅผ ๊ตฌ์ถํฉ๋๋ค.
- ๊ณผํ์ ์๋ฎฌ๋ ์ด์ : ๋๊ท๋ชจ ๊ณผํ ๋ชจ๋ธ(์: ๊ธฐํ ๋ณํ, ๋ถ์ ๋์ญํ, ์ธ๊ตฌ ์ ์ ํ)์ ์ข ์ข ๋ชฌํ ์นด๋ฅผ๋ก ์๋ฎฌ๋ ์ด์ ์ ์ํด ๋ฐฉ๋ํ ์์ ๊ณ ํ์ง ๋์๋ฅผ ํ์๋ก ํฉ๋๋ค. Wasm/WASI๋ ์ด๋ฌํ ๊ณ์ฐ์ ์ํ ์ด์ ๊ฐ๋ฅํ๊ณ ๊ณ ์ฑ๋ฅ์ ํ๋ซํผ์ ์ ๊ณตํ์ฌ, ์ ์ธ๊ณ ๊ธฐ๊ด์์ ์ํํ๋ ์ฐ๊ตฌ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
๊ณผํ ์ฐ๊ตฌ ๋ฐ ๋ฐ์ดํฐ ์ต๋ช ํ: ๊ฐ์ธ์ ๋ณด ๋ณดํธ์ ์ ํ์ฑ ์ ์ง
๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ์ฐ๊ตฌ์์ ๋์์ฑ์ ์ต๋ช ํ์ ํต๊ณ์ ๋ฌด๊ฒฐ์ฑ์ ์ํด ๋งค์ฐ ์ค์ํฉ๋๋ค:
- ์ฐจ๋ถ ํ๋ผ์ด๋ฒ์: ๋ฐ์ดํฐ์ ์ ์ ์คํ๊ฒ ๋ณด์ ๋ ์์์ ๋ ธ์ด์ฆ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ์ฐจ๋ถ ํ๋ผ์ด๋ฒ์๋ฅผ ๋ฌ์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ธฐ์ ๋ก, ๊ฐ๋ณ ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ๊ณต๊ฐํ์ง ์๊ณ ํต๊ณ ๋ถ์์ ํ์ฉํฉ๋๋ค. Wasm/WASI๋ ๊ฐ์ธ์ ๋ณด ๋ณดํธ ๋ฐ์ดํฐ ๋ถ์ ๋ชจ๋์ ๊ตฌ๋ํ ์ ์์ต๋๋ค.
- ๋ฌด์์ ๋์กฐ ์ํ(RCTs): ์๋ฃ ๋๋ ์ฌํ ๊ณผํ ์ฐ๊ตฌ์์ ์ฐธ๊ฐ์๋ฅผ ํต์ ๊ทธ๋ฃน๊ณผ ์น๋ฃ ๊ทธ๋ฃน์ ๋ฌด์์๋ก ํ ๋นํ๋ ๊ฒ์ ํ์์ ์ ๋๋ค. ์์ ํ ๋์์ฑ์ ํธํฅ๋์ง ์์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํ๋ฉฐ, ๋ค์ํ ์ธ๊ตฌ ํต๊ณํ์ ๋ฐ ์ง๋ฆฌ์ ์ง๋จ์ ์ ์ฉํ ์ ์์ต๋๋ค.
๋ถ์ฐ ์์คํ ๋ฐ ๊ธ๋ก๋ฒ ๋ก๋ ๋ฐธ๋ฐ์ฑ
์ข ์ข ์ ์ธ๊ณ ์ฌ๋ฌ ๋ฐ์ดํฐ ์ผํฐ์ ๊ฑธ์ณ ์๋ ํ๋ ํด๋ผ์ฐ๋ ์ํคํ ์ฒ ๋ฐ ๋ถ์ฐ ์์คํ ์ ๋ค์๊ณผ ๊ฐ์ ๋ชฉ์ ์ ์ํด ์์ธก ๋ถ๊ฐ๋ฅํ ๋์์ฑ์ ์ด์ ์ ์ป์ต๋๋ค:
- ๋ถ์ฐ ํฉ์: ์ผ๋ถ ํฉ์ ํ๋กํ ์ฝ์์์ ๋ฆฌ๋ ์ ์ถ๊ณผ ๊ฐ์ ํน์ ๋ถ์ฐ ์๊ณ ๋ฆฌ์ฆ์ ๊ต์ฐฉ ์ํ๋ฅผ ํด๊ฒฐํ๊ฑฐ๋ ๊ณต์ ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋์์ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๊ณ ์ ID ์์ฑ: ๋ถ์ฐ ์๋น์ค ์ ๋ฐ์ ๊ฑธ์ณ ์ถฉ๋ ์์ด ๋ณดํธ์ ์ผ๋ก ๊ณ ์ ํ ์๋ณ์(UUID)๋ฅผ ์์ฑํ๋ ค๋ฉด ๊ฐ๋ ฅํ ๋์์ฑ์ด ํ์ํ๋ฉฐ, ์ด๋ ๋ณต์กํ ๊ธ๋ก๋ฒ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์์ ์์ฒญ๊ณผ ๋ฆฌ์์ค๋ฅผ ์ถ์ ํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
- ๋์ ๋ฆฌ์์ค ํ ๋น: ๋ฌด์์ํ๋ ์ผ๋ถ ๋ก๋ ๋ฐธ๋ฐ์ฑ ์ ๋ต์ด๋ ๋ฆฌ์์ค ํ ๋น ์๊ณ ๋ฆฌ์ฆ์์ ์ํฌ๋ก๋๋ฅผ ๊ณต์ ํ๊ฒ ๋ถ์ฐํ๊ณ ํซ์คํ์ ๋ฐฉ์งํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
Wasm/WASI ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ํธํ์ ๋์์ฑ ๊ตฌํํ๊ธฐ
WASI์ ์ํธํ์ ๋์์ฑ์ ํ์ฉํ๋ ค๋ ๊ฐ๋ฐ์์๊ฒ๋ ๊ตฌํ ์ธ๋ถ ์ฌํญ๊ณผ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๋ค์ํ ์ธ์ด์์ WASI random_get ํ์ฉํ๊ธฐ
WASI์ ์ฅ์ ์ ๊ธฐ๋ณธ ์ด์ ์ฒด์ ๋ฅผ ์ถ์ํํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ฐ๋ฐ์๋ ์ ํธํ๋ ์ธ์ด๋ก ์ฝ๋๋ฅผ ์์ฑํ์ฌ Wasm์ผ๋ก ์ปดํ์ผํ๊ณ , ์ธ์ด ๋ฐํ์์ด๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ WASI ํธ์ถ์ ์ฒ๋ฆฌํฉ๋๋ค.
- Rust: Rust์ ์ธ๊ธฐ ์๋
randํฌ๋ ์ดํธ๋ WASI์ ์ ํตํฉ๋์ด ์์ต๋๋ค. Rust ์ ํ๋ฆฌ์ผ์ด์ ์ WASI ํ๊ฒ(์:wasm32-wasi)์ผ๋ก Wasm์ผ๋ก ์ปดํ์ผํ ๋,rand::thread_rng()๋๋rand::rngs::OsRng์ ๋ํ ํธ์ถ์ Rust ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ํด ์๋์ผ๋ก WASI์random_get์ ๋งคํ๋ฉ๋๋ค. ์ด๋ ์ ์ธ๊ณ Rust ๊ฐ๋ฐ์์๊ฒ ์ต์ํ๊ณ ์์ ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.use rand::Rng; fn main() { let mut rng = rand::thread_rng(); let random_byte: u8 = rng.gen(); println!("์์์ ๋ฐ์ดํธ: {}", random_byte); let mut buffer = [0u8; 32]; rng.fill(&mut buffer[..]); println!("32๊ฐ์ ์์ ๋ฐ์ดํธ: {:?}", buffer); } - C/C++: WASI๋ก ์ปดํ์ผ๋ C/C++ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฒฝ์ฐ, ๋ณด์ ๋์์ฑ์ ์ํด ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์(์:
arc4random_buf()๋๋/dev/urandom๊ณผ ์ ์ฌํ ๊ธฐ๋ฅ ์ฃผ์์ ์ ์ฌ์ ์ธ ์ฌ์ฉ์ ์ ์ ๋ํผ)๋ WASI libc ๊ตฌํ์ ์ํด WASI์random_get์ ๋งคํ๋ฉ๋๋ค. ๊ฐ๋ฐ์๋ ๋ณด์์ ๋ฏผ๊ฐํ ์ปจํ ์คํธ์์rand()๋ฐsrand()๋ฅผ ํผํด์ผ ํฉ๋๋ค.// ์์ (๊ฐ๋ ์ , ์ค์ ๊ตฌํ์ WASI libc์ ๋ฐ๋ผ ๋ค๋ฆ) #include <stdio.h> #include <stdint.h> #include <stdlib.h> // arc4random_buf ๋๋ ์ ์ฌํ ํจ์๋ฅผ ์ํด // WASI ํ๊ฒฝ์์ arc4random_buf๋ random_get์ ๋งคํ๋ ์ ์์ต๋๋ค extern void arc4random_buf(void *buf, size_t nbytes); int main() { uint8_t buffer[32]; arc4random_buf(buffer, sizeof(buffer)); printf("32๊ฐ์ ์์ ๋ฐ์ดํธ: "); for (size_t i = 0; i < sizeof(buffer); ++i) { printf("%02x", buffer[i]); } printf("\n"); return 0; } - Go: Go์ ์คํ์ ์ธ WASI ์ง์์ ํตํด,
crypto/rand์ ๊ฐ์ ํจํค์ง๋ WASIrandom_get์ ์ฌ๋ฐ๋ฅด๊ฒ ๋งคํ๋์ด ํ์ํ ์ํธํ์ ๋์์ฑ์ ์ ๊ณตํ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.package main import ( "crypto/rand" "fmt" "log" ) func main() { b := make([]byte, 32) _, err := rand.Read(b) if err != nil { log.Fatal(err) } fmt.Printf("32๊ฐ์ ์์ ๋ฐ์ดํธ: %x\n", b) } - AssemblyScript: TypeScript-to-WebAssembly ์ปดํ์ผ๋ฌ์ธ AssemblyScript๋ ์ข
์ข
์์คํ
์์ค ์์
์ ์ํด ํธ์คํธ ํจ์์ ์์กดํฉ๋๋ค. ์ํธํ์ ๋์์ฑ์ ์ํด, ์ผ๋ฐ์ ์ผ๋ก WASI
random_get์ ํธ์ถํ๋ ํธ์คํธ ํจ์๋ฅผ ์ํฌํธํฉ๋๋ค.// AssemblyScript์์ // ํธ์คํธ ํจ์ 'randomGet'์ด ์ํฌํธ๋์ด WASI ํธ์ถ์ ์ฒ๋ฆฌํ๋ค๊ณ ๊ฐ์ @external("env", "randomGet") declare function randomGet(ptr: usize, len: usize): void; export function generateRandomBytes(len: i32): Uint8Array { let buffer = new Uint8Array(len); randomGet(buffer.dataStart, buffer.byteLength); return buffer; } // ํธ์คํธ ์ธก (์: WASI ๋ฐํ์์ด ์๋ Node.js์์) // const instance = await WebAssembly.instantiate(..., { // env: { // randomGet: (ptr, len) => { // // node์ crypto.randomFillSync ๋๋ ์ ์ฌํ ํจ์ ์ฌ์ฉ // const randomBytes = crypto.randomBytes(len); // // 'ptr' ์์น์ Wasm ๋ฉ๋ชจ๋ฆฌ์ ์ฐ๊ธฐ // } // } // });
์์ ํ ๋์ ์์ฑ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
WASI๊ฐ CSPRNG์ ๋ํ ์ ๊ทผ์ ์ ๊ณตํ๋๋ผ๋, ๊ฐ๋ฐ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ผ์ผ ํฉ๋๋ค:
- ๋ณด์์ ์ํด ํญ์ CSPRNG ์ฌ์ฉ: ์ด๋ค ๋ณด์์ ๋ฏผ๊ฐํ ๋ชฉ์ ์ ์ํด์๋
time()์ ์๋๋ก ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฐ๋จํ PRNG๋ฅผ ์ ๋ ์ฌ์ฉํ์ง ๋ง์ญ์์ค. ํญ์ ์ธ์ด ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ ์ํธํ์ ์ผ๋ก ์์ ํ ์ต์ (WASIrandom_get์ ์์ํ๋)์ ์ ํํ์ญ์์ค. - ์ถฉ๋ถํ ์ํธ๋กํผ ์์ฒญ: ํน์ ์ํธํ ์๊ตฌ์ ๋ง๋ ์ถฉ๋ถํ ์์์ ๋ฐ์ดํธ๋ฅผ ์์ฒญํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, 256๋นํธ(32๋ฐ์ดํธ)๋ ๊ฐ๋ ฅํ ์ํธํ ํค์ ๋ํ ์ผ๋ฐ์ ์ธ ๊ถ์ฅ ์ฌํญ์ ๋๋ค.
- ์ค๋ฅ๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ:
random_getํจ์(๋๋ ๊ทธ ์ธ์ด ๋ํผ)๋ ์ ์ฌ์ ์ผ๋ก ์คํจํ ์ ์์ต๋๋ค(์: ํธ์คํธ์ ์ํธ๋กํผ๊ฐ ๋ถ์กฑํ๊ฑฐ๋ ์ ๊ทผ์ ๋ฐฉ์งํ๋ ๋ณด์ ์ ์ฑ ์ด ์๋ ๊ฒฝ์ฐ). ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝํ๊ฑฐ๋ ์์ธก ๊ฐ๋ฅํ ๊ฐ์ผ๋ก ์งํํ๋ ๋์ , ์์ ํ๊ฒ ์คํจํ๊ฑฐ๋ ๊ด๋ฆฌ์์๊ฒ ๊ฒฝ๊ณ ํ๋ ๋ฑ ์ด๋ฌํ ์ค๋ฅ๋ฅผ ๊ฒฌ๊ณ ํ๊ฒ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. - ์ ๊ธฐ์ ์ธ ์ฌ์๋ฉ (ํธ์คํธ ์ฑ ์): WASI๊ฐ ์ด๊ฒ์ ํธ์คํธ์ ์์ํ์ง๋ง, ํธ์คํธ์ ๊ฒฌ๊ณ ํ CSPRNG ๊ตฌํ์ด ์ ๋ฐฉํฅ ๋น๋ฐ์ฑ์ ์ ์งํ๊ธฐ ์ํด ์ง์์ ์ผ๋ก ์๋ก์ด ์ํธ๋กํผ๋ฅผ ์์งํ๊ณ ์์ฒด์ ์ผ๋ก ์ฌ์๋ฉํ๋ค๋ ๊ฒ์ ์ดํดํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ๊ฐ์ฌ ๋ฐ ๊ฒํ : ๋ชจ๋ ๋์์ฑ ์๊ตฌ ์ฌํญ์ด ์์ ํ๊ฒ ์ถฉ์กฑ๋๋์ง ํ์ธํ๊ธฐ ์ํด ์ฝ๋์ ๊ทธ ์ข ์์ฑ์ ์ ๊ธฐ์ ์ผ๋ก ๊ฐ์ฌํฉ๋๋ค. ๊ธฐ๋ณธ CSPRNG ๊ตฌํ์ด๋ WASI ๋ฐํ์์์ ๋ฐ๊ฒฌ๋ ๋ชจ๋ ์ทจ์ฝ์ ์ ๋ํด ์ ๋ณด๋ฅผ ์ป์ผ์ญ์์ค.
ํผํด์ผ ํ ํจ์ : ๋์์ฑ ๊ตฌํ์์์ ํํ ์ค์
CSPRNG์ ์ ๊ทผํ ์ ์๋๋ผ๋ ์ค์๋ ๋ณด์์ ์์์ํฌ ์ ์์ต๋๋ค. ํนํ ์ํธํ ํ๋ก๊ทธ๋๋ฐ์ ์ต์ํ์ง ์์ ๊ฐ๋ฐ์๋ ๋ค์๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ํจ์ ์ ์๊ณ ์์ด์ผ ํฉ๋๋ค:
- ์ฝํ ์๋ ์ฌ์ฉ: ํ์ฌ ์๊ฐ์ด๋ ํ๋ก์ธ์ค ID์ ๊ฐ์ ์์ธก ๊ฐ๋ฅํ ๊ฐ์ผ๋ก PRNG๋ฅผ ์๋ฉํ๋ ๊ฒ์ ์์ ํ ๋ถ์์ ํ๊ฒ ๋ง๋ญ๋๋ค. ์ด๋ WASI์ CSPRNG์ ๋ํ ์ง์ ์ ์ธ ์ ๊ทผ์์๋ ๋ ๋ฌธ์ ์ด์ง๋ง, ์ฌ์ ํ ์ผ๋ฐ์ ์ธ ์์น์ ๋๋ค.
- ์ถฉ๋ถํ ๋์์ฑ์ ์์ฒญํ์ง ์์: ๋๋ฌด ์ ์ ์์์ ๋นํธ(์: 256๋นํธ๊ฐ ํ์ํ๋ฐ 64๋นํธ ํค ์ฌ์ฉ)๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณด์์ด ํฌ๊ฒ ์ฝํ๋ฉ๋๋ค.
- ๋์์ฑ ์ ๋จ: ์ ์คํ ๊ณ ๋ ค ์์ด CSPRNG์ ์ถ๋ ฅ ์ค ์ผ๋ถ๋ง ์ทจํ๋ฉด ๋๋๋ก ํธํฅ์ ๋์ ํ๊ฑฐ๋ ์ํธ๋กํผ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
- ๋ ผ์ค ๋๋ ํค ์ฌ์ฌ์ฉ: ๋์ผํ ๋ ผ์ค(ํ ๋ฒ ์ฌ์ฉ๋๋ ์ซ์)๋ ์ํธํ ํค๋ฅผ ์ฌ๋ฌ ์์ ์ ์ฌ์ฉํ๋ฉด ์ฌ์ ์ก ๊ณต๊ฒฉ์ด๋ ํค ๋ณต๊ตฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ์ฌ๊ฐํ ๋ณด์ ์ทจ์ฝ์ ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- ์ฌ์ฉ์ ์ ์ ๋์ ์์ฑ๊ธฐ ๊ตฌ์ถ: ๊ด๋ฒ์ํ ๋๋ฃ ๊ฒํ ๋ฅผ ๊ฑฐ์น ๋ ธ๋ จํ ์ํธํ์๊ฐ ์๋๋ผ๋ฉด, ์ ๋ ์์ ๋ง์ CSPRNG๋ฅผ ๊ตฌํํ๋ ค๊ณ ์๋ํ์ง ๋ง์ญ์์ค. ํญ์ ์ด์ ์ฒด์ ์ ๊ฒฌ๊ณ ํ ๊ธฐ๋ฅ์ ํ์ฉํ๋ ์ ๊ฒ์ฆ๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ตฌํ์ ์์กดํ์ญ์์ค.
- ํธ์คํธ ํ๊ฒฝ ๋ฌด์: WASI๊ฐ ํธ์คํธ๋ฅผ ์ถ์ํํ์ง๋ง, ํธ์คํธ์ ๊ธฐ๋ณธ CSPRNG์ ๋ณด์์ ๋ฌด์๋ณด๋ค ์ค์ํฉ๋๋ค. ๋ถ์์ ํ๊ฑฐ๋ ์์๋ ํธ์คํธ ํ๊ฒฝ์ ์ฌ์ ํ Wasm ๋ชจ๋์ ๋ณด์์ ์ฝํ์ํฌ ์ ์์ผ๋ฉฐ, ์ด๋ ์ ์ธ๊ณ์ ์ผ๋ก ์์ ํ ๋ฐฐํฌ ๊ดํ์ ํ์์ฑ์ ๊ฐ์กฐํฉ๋๋ค.
Wasm ์ํ๊ณ์์ ๋ณด์ ๋์์ฑ์ ๊ธ๋ก๋ฒ ์ํฅ๊ณผ ๋ฏธ๋
WASI๋ฅผ ํตํ ์ํธํ์ ๋์์ฑ์ ํ์คํ๋ ์ ์ฒด WebAssembly ์ํ๊ณ๋ฅผ ์ํ ์ค์ํ ์ง์ ์ ๋๋ค. ๊ทธ ์ํฅ์ ๊ธ๋ก๋ฒ ์ํํธ์จ์ด ๊ฐ๋ฐ ๋ฐ ์ฌ์ด๋ฒ ๋ณด์์ ๋ค์ํ ์ฐจ์์ ๊ฑธ์ณ ๊ณต๋ช ํฉ๋๋ค.
๋ถ์ฐ ์ปดํจํ ์์์ ์ ๋ขฐ ๋ฐ ๋ณด์ ๊ฐํ
Wasm์ด ๋ธ๋ผ์ฐ์ ์์ ์๋ฒ, ์ฃ์ง ์ฅ์น ๋ฐ ๋ถ์ฐ ๋คํธ์ํฌ๋ก ๊ทธ ์์ญ์ ๊ณ์ ํ์ฅํจ์ ๋ฐ๋ผ, ๊ณ ํ์ง์ ์ํธํ์ ์ผ๋ก ์์ ํ ๋์๋ฅผ ์ผ๊ด๋๊ฒ ์ป์ ์ ์๋ ๋ฅ๋ ฅ์ ๊ธฐ๋ณธ์ ์ ๋๋ค. ์ด๋ Wasm/WASI ์์ ๊ตฌ์ถ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด์ ์ ์ธ๊ณ ์ด๋์ ๋ฐฐํฌ๋๋ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ์์ ์๊ฒ ์ฒ๋ฆฌํ๊ณ , ์์ ํ ํค๋ฅผ ์์ฑํ๋ฉฐ, ๋ณต์กํ ์ํธํ ํ๋กํ ์ฝ์ ์ฐธ์ฌํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
์ด๋ ๋ถ์ฐ ์์คํ ์ ๋ํ ๋ ํฐ ์ ๋ขฐ๋ฅผ ์กฐ์ฑํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์๊ฒฉ ์์น์ IoT ์ฅ์น์์ ์คํ๋๋ Wasm ๋ชจ๋์ WASI ๋๋ถ์ ์ฃผ์ ๋ฐ์ดํฐ ์ผํฐ์ ์๋ฒ๋งํผ ์ ๋ขฐํ ์ ์๋ ๋์ ์์ค๋ฅผ ์๊ณ ๊ณ ์ ํ๊ณ ์์ ํ ์๊ฒฉ ์ฆ๋ช ์ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ณด์ ํ๋ฆฌ๋ฏธํฐ๋ธ์ ๊ท ์ผ์ฑ์ ๊ธ๋ก๋ฒ ํ์ ์ ์ํ ๊ฐ๋ ฅํ ์๋๋ ฅ์ ๋๋ค.
ํ์คํ ๋ ธ๋ ฅ๊ณผ ์ปค๋ฎค๋ํฐ ๊ธฐ์ฌ
WASI ์ฌ์์ ํ๋ ฅ์ ์ธ ์ปค๋ฎค๋ํฐ์ ์ํด ์ฃผ๋๋๋ ๊ฐ๋ฐฉํ ํ์ค์ ๋๋ค. ์ด ๊ฐ๋ฐฉํ ๊ฐ๋ฐ ๋ชจ๋ธ์ ๊ด๋ฒ์ํ ๋๋ฃ ๊ฒํ , ์ ์ฌ์ ๋ฌธ์ ์ ์ ์ํ ์๋ณ ๋ฐ ์ง์์ ์ธ ๊ฐ์ ์ ํ์ฉํ๋ฏ๋ก ๋ณด์์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์๋ก์ด ์ํธํ ๊ณผ์ ๊ฐ ๋ฑ์ฅํ๊ณ ์๋ก์ด ์ํธ๋กํผ ์์ค๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํด์ง์ ๋ฐ๋ผ, WASI ์ฌ์์ ์ด๋ฅผ ํตํฉํ์ฌ ๊ด๋ จ์ฑ๊ณผ ๊ฒฌ๊ณ ์ฑ์ ์ ์งํ๋๋ก ์งํํ ์ ์์ต๋๋ค.
์๋ก์ด WASI API์ ๋ํ ์ ์๋ถํฐ ๋ค์ํ ์ธ์ด ๋ฐ ๋ฐํ์์์์ ๊ตฌํ์ ์ด๋ฅด๊ธฐ๊น์ง ์ปค๋ฎค๋ํฐ์ ๊ธฐ์ฌ๋ ํ์์ ์ ๋๋ค. ์ด ๊ธ๋ก๋ฒ ํ๋ ฅ์ WASI ์ํ๊ณ๊ฐ ์ต์ฒจ๋จ์ ์ ์งํ๊ณ ์ ์ธ๊ณ ๊ฐ๋ฐ์ ๋ฐ ๊ธฐ์ ์ ๋ค์ํ ์๊ตฌ๋ฅผ ํด๊ฒฐํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
๋ฏธ๋ ์ ๋ง: WASI์ ์งํ์ ๊ณ ๊ธ ํ๋ฆฌ๋ฏธํฐ๋ธ
WASI์ ์ฌ์ ์ ์์ง ๋๋์ง ์์์ต๋๋ค. WASI์ ๋ฏธ๋ ๋ฒ์ ์๋ ๋ ์ง๋ณด๋ ์ํธํ ํ๋ฆฌ๋ฏธํฐ๋ธ๊ฐ ํฌํจ๋ ์ ์์ผ๋ฉฐ, ํธ์คํธ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ํ๋์จ์ด ๋ณด์ ๋ชจ๋(HSM)์ด๋ ์ ๋ขฐ ์คํ ํ๊ฒฝ(TEE)์ ๋ํ ์ง์ ์ ์ธ ์ ๊ทผ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ด๋ ํนํ ๊ธ์ต, ๊ตญ๊ฐ ์๋ณด ๋ฐ ์ค์ ์ธํ๋ผ์ ๊ฐ์ ๊ณ ๋๋ก ๋ฏผ๊ฐํ ์์ญ์์ Wasm ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ ํ์ธ๋ฅผ ๋์ฑ ๊ฐํํ ์ ์์ต๋๋ค.
๋ํ, ์์๋ด์ฑ์ํธ์ ๋ํ ์๋ก์ด ์ฐ๊ตฌ๊ฐ ์งํ๋จ์ ๋ฐ๋ผ, WASI๋ Wasm ๋ชจ๋์ด ์์๋ด์ฑ ๋์ ์์ฑ๊ธฐ๋ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ์ ๊ทผํ ์ ์๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ฌ, ๋ฏธ๋์ ๋ณด์ ํ๊ฒฝ์ ์ํ๊ณ๋ฅผ ๋๋น์ํฌ ์ ์์ต๋๋ค. WASI์ ๋ชจ๋์ ํน์ฑ์ ์ด๋ฌํ ๋ฏธ๋ ์๊ตฌ ์ฌํญ์ ๋๋ผ์ธ ์ ๋๋ก ์ ์ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด, ์ ์ธ๊ณ์ ์ผ๋ก ์์ ํ ์ปดํจํ ์ ๊ธฐ๋ฐ์ผ๋ก์์ ์ญํ ์ ๊ณต๊ณ ํ ํฉ๋๋ค.
๊ฒฐ๋ก : ๋ ์์ ํ๊ณ ์์ธก ๊ฐ๋ฅํ ๋์งํธ ๋ฏธ๋ ๊ตฌ์ถ
์ํธํ์ ์ผ๋ก ์์ ํ ๋์ ์์ฑ์ ๋์งํธ ์๋์ ์กฐ์ฉํ ์์ ์ด๋ฉฐ, ํ๋ ๋ณด์ ์ธํ๋ผ์ ๋ง์ ๋ถ๋ถ์ด ์์กดํ๋ ๊ทผ๋ณธ์ ์ธ ๊ตฌ์ฑ ์์์ ๋๋ค. WebAssembly์ WASI์ ๋ฑ์ฅ์ผ๋ก, ์ด ์ค์ํ ๊ธฐ๋ฅ์ ์ด์ ์ฐจ์ธ๋ ๊ณ ์ฑ๋ฅ, ์๋๋ฐ์ค ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์ ์ด๊ณ ์ด์ ๊ฐ๋ฅํ๊ฒ ์ ๊ณต๋ฉ๋๋ค.
ํต์ฌ ์์ฝ
- ๋์์ฑ์ ์ค์ํฉ๋๋ค: ๋ชจ๋ ๋ณด์์ ๋ฏผ๊ฐํ ์ ํ๋ฆฌ์ผ์ด์ ์์, ์ํธํ์ ์ผ๋ก ์์ ํ ๋์์ฑ์ ํค ์์ฑ, ๋ ผ์ค ๋ฐ ์ ๋ฐ์ ์ธ ์์คํ ๋ฌด๊ฒฐ์ฑ์ ์ํด ํํํ ์ ์์ต๋๋ค.
- Wasm์ ๊ฒฐ์ ๋ก ์ ์ธ๋ถ ๋์์ด ํ์ํฉ๋๋ค: ์๋๋ฐ์คํ๋ ๊ฒฐ์ ๋ก ์ ํน์ฑ์ผ๋ก ์ธํด Wasm์ ๋น๊ฒฐ์ ๋ก ์ ์ํธ๋กํผ์ ์์ ํ๊ฒ ์ ๊ทผํ ๋ฐฉ๋ฒ์ด ํ์ํฉ๋๋ค.
- WASI๊ฐ ํด๊ฒฐ์ฑ
์ ์ ๊ณตํฉ๋๋ค: WebAssembly ์์คํ
์ธํฐํ์ด์ค(WASI)๋
random_get๊ณผ ๊ฐ์ ํจ์๋ฅผ ํตํด ํธ์คํธ ์ด์ ์ฒด์ ์ CSPRNG์ ๋ํ ์ ๊ทผ์ ํ์คํํ์ฌ ๊ณ ํ์ง์ ๋์์ฑ์ ๋ณด์ฅํฉ๋๋ค. - CSPRNG๋ ๋ค๋ฆ ๋๋ค: ํญ์ ๊ฐ๋จํ PRNG์ CSPRNG๋ฅผ ๊ตฌ๋ณํ๊ณ , ๋ชจ๋ ๋ณด์ ์ปจํ ์คํธ์์ ํ์๋ฅผ ์ฌ์ฉํ์ญ์์ค. CSPRNG๋ ๊ณ ํ์ง์ ์ํธ๋กํผ ์์ค์ ์์กดํฉ๋๋ค.
- ๊ธ๋ก๋ฒ ์ํฅ: ์ด ๊ธฐ๋ฅ์ ์ ์ธ๊ณ์ ์ผ๋ก ๋ธ๋ก์ฒด์ธ, ๋ณด์ ํต์ , ๊ฒ์, ๊ณผํ ์ฐ๊ตฌ ๋ฐ ๋ถ์ฐ ์์คํ ์์ ์์ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐํํฉ๋๋ค.
- ๋ชจ๋ฒ ์ฌ๋ก๋ ํ์์ ์ ๋๋ค: WASI๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ๊ฐ๋ฐ์๋ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๊ณ , ์ผ๋ฐ์ ์ธ ํจ์ ์ ํผํ๋ฉฐ, ์ธ์ด ๋ค์ดํฐ๋ธ์ ์์ ํ ๋์ API๋ฅผ ํ์ฉํด์ผ ํฉ๋๋ค.
๊ฐ๋ฐ์ ๋ฐ ์ํคํ ํธ๋ฅผ ์ํ ํ๋ ์ด๊ตฌ
๊ฐ๋ฐ์์ ์ํคํ ํธ๋ก์ WebAssembly์ WASI๋ฅผ ์์ฉํ๋ ๊ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฑ๋ฅ์ด ๋ฐ์ด๋๊ณ ์ด์ ๊ฐ๋ฅํ ๋ฟ๋ง ์๋๋ผ ๋ณธ์ง์ ์ผ๋ก ๋ ์์ ํ ๋ฏธ๋๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. WASI์ ์ํธํ์ ๋์ ์์ฑ๊ธฐ๋ฅผ ์ดํดํ๊ณ ์ฌ๋ฐ๋ฅด๊ฒ ํ์ฉํจ์ผ๋ก์จ, ๋น์ ์ ์ ์ธ๊ณ ๋ชจ๋ ๊ณณ์ ์ฌ์ฉ์์ ์กฐ์ง์ ์ด์ต์ด ๋๋ ๋ ์ ๋ขฐํ ์ ์๋ ๋์งํธ ์ํ๊ณ์ ๊ธฐ์ฌํ๋ ๊ฒ์ ๋๋ค.
WASI ์ฌ์์ ํ์ํ๊ณ , ์ฝ๋๋ฅผ Wasm/WASI๋ก ์ปดํ์ผํ๋ ์คํ์ ํ๋ฉฐ, ์ด๋ฌํ ๊ฐ๋ ฅํ ๋ณด์ ํ๋ฆฌ๋ฏธํฐ๋ธ๋ฅผ ์ฐจ์ธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํตํฉํด ๋ณด์๊ธฐ๋ฅผ ๊ถ์ฅํฉ๋๋ค. ์์ ํ ๋ถ์ฐ ์ปดํจํ ์ ๋ฏธ๋๋ ์ค๋๋ ๊ตฌ์ถ๋๊ณ ์์ผ๋ฉฐ, WebAssembly WASI์ ์ํธํ์ ์ผ๋ก ์์ ํ ๋์์ฑ์ ๊ทธ ๊ธฐ๋ฐ์ ์ด์์ ๋๋ค.